import logging
import os
import shutil
import zipfile

logger = logging.getLogger(__name__)


def get_file_extension(filename: str) -> str:
    """Получаем разрешение файла"""

    _, extension = os.path.splitext(filename)
    return extension.replace(".", "").lower()


def delete_file(path: str) -> None:
    """Безопасно удаляем файл"""

    try:
        os.remove(path)
    except Exception:
        pass


def create_dir(dir_path: str):
    """Создаем директорию"""

    try:
        os.mkdir(dir_path)
        logger.info(f"Создал директорию: {dir_path}")
    except FileExistsError:
        pass


def remove_dir(dir_path: str):
    """Удаляем директорию"""

    try:
        shutil.rmtree(dir_path)
        logger.info(f"Удалил директорию: {dir_path}")
    except Exception:
        pass


def get_dir_files(dir_path: str) -> list[str]:
    """Получаем файлы в директории"""

    return os.listdir(dir_path)


def create_archive(dir_path: str) -> str:
    """Создаем архив из директории"""

    dir_files = get_dir_files(dir_path)
    zip_path = f"{dir_path}.zip"
    with zipfile.ZipFile(zip_path, "w", compresslevel=9) as zf:
        for file_path in dir_files:
            zf.write(os.path.join(dir_path, file_path))

    return zip_path


def read_zip_file(zip_path: str) -> list[bytes]:
    """Читаем файлы из архива в байты"""

    files_bytes = []
    with zipfile.ZipFile(zip_path) as zf:
        for file in zf.namelist():
            with zf.open(file) as f:
                files_bytes.append(f.read())

    return files_bytes


def unpack_zip_file(zip_path: str):
    """Распаковываем zip архив"""

    dir_out = zip_path.split(".")[-1]
    shutil.unpack_archive(zip_path, dir_out)

    return dir_out
